Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit a46525cae97ef8290d8828567f4acac0ef3c636b


Parents : 137b64e
Author : Mark Qvist <bc7291552be7a58f361522990465165c>
Date : 2026-05-06T14:18:58+02:00

Fixed annoying cursor reset behavior on scroll

Changes

2 files changed, 8 insertions(+), 2 deletions(-)


Diff

diff --git a/nomadnet/ui/textui/MicronParser.py b/nomadnet/ui/textui/MicronParser.py
index 75fa13b..a043f99 100644
--- a/nomadnet/ui/textui/MicronParser.py
+++ b/nomadnet/ui/textui/MicronParser.py
@@ -802,7 +802,7 @@ class LinkableText(urwid.Text):
super().__init__(text, align=align)
self.delegate = delegate
self._cursor_position = 0
- self.key_timeout = 3
+ self.key_timeout = 2
self.in_columns = False
if self.delegate != None:
self.delegate.last_keypress = 0

diff --git a/nomadnet/vendor/Scrollable.py b/nomadnet/vendor/Scrollable.py
index 5ddab2d..7accf8f 100644
--- a/nomadnet/vendor/Scrollable.py
+++ b/nomadnet/vendor/Scrollable.py
@@ -52,6 +52,8 @@ class Scrollable(urwid.WidgetDecoration):
self._old_cursor_coords = None
self._rows_max_cached = 0
self.force_forward_keypress = force_forward_keypress
+ self.force_cursor_update = False
+ self.cursor_update_forced_at = 0
super().__init__(widget)
def render(self, size, focus=False):
@@ -106,7 +108,9 @@ class Scrollable(urwid.WidgetDecoration):
# Trimmed canvas contains the cursor, e.g. in an Edit widget
self._forward_keypress = True
else:
- if canv_full.cursor is not None:
+ force_check = self.force_cursor_update and (time.time()-self.cursor_update_forced_at < 0.25)
+ if canv_full.cursor is not None or force_check:
+ self.force_cursor_update = False
# Full canvas contains the cursor, but scrolled out of view
self._forward_keypress = False
@@ -511,6 +515,8 @@ class ScrollBar(urwid.WidgetDecoration):
handled = ow.mouse_event(ow_size, event, button, col, row, focus)
if not handled and hasattr(ow, 'set_scrollpos'):
+ ow.force_cursor_update = True
+ ow.cursor_update_forced_at = time.time()
self._sevt_interval = time.time()-self._sevt_start
if self._sevt_interval > 0.3: self._sevt_start = 0; self._accel = 1; self._sfreq_deque.clear()
if self._sevt_start == 0: self._sevt_start = time.time()


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────